/**
 * 手机号Form验证
 */
export function mobileNoValidator(rule, value, callback) {
  const reg = /^[1][1,2,3,4,5,6,7,8,9][0-9]{9}$/
  if (value) {
    setTimeout(() => {
      if (!Number.isInteger(+value)) {
        callback(new Error('请输入数字值'))
      } else {
        if (reg.test(value)) {
          callback()
        } else {
          console.error('mobileNoValidator', rule)
          callback(new Error('电话号码格式不正确(11位)'))
        }
      }
    }, 100)
  }
}

/**
 * 固化号Form验证
 */
export function telNoValidator(rule, value, callback) {
  const reg = /^(\(\d{3,4}\)|\d{3,4}-|s)?|\d{7,14}$/
  if (value) {
    setTimeout(() => {
      if (!Number.isInteger(+value)) {
        callback(new Error('请输入数字值'))
      } else {
        if (reg.test(value)) {
          callback()
        } else {
          console.error('telNoValidator', rule)
          callback(new Error('电话号码格式不正确(11位)'))
        }
      }
    }, 100)
  }
}

/**
 * 身份证号Form验证
 */
export function idCardValidator(rule, value, callback) {
  const reg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
  if (value) {
    setTimeout(() => {
      if (!Number.isInteger(+value)) {
        callback(new Error('请输入数字值'))
      } else {
        if (reg.test(value)) {
          callback()
        } else {
          console.error('idCardValidator', rule)
          callback(new Error('电话号码格式不正确(11位)'))
        }
      }
    }, 100)
  }
}

/**
 * 邮箱Form验证
 */
export function emailValidator(rule, value, callback) {
  const reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/
  if (value) {
    setTimeout(() => {
      if (reg.test(value)) {
        callback()
      } else {
        console.error('emailValidator', rule)
        callback(new Error('邮箱格式不正确'))
      }
    }, 100)
  }
}

/**
 * URLForm验证
 */
export function urlValidator(rule, value, callback) {
  const reg = /^((http?|https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/
  if (value) {
    setTimeout(() => {
      if (reg.test(value)) {
        callback()
      } else {
        console.error('urlValidator', rule)
        callback(new Error('URL格式不正确'))
      }
    }, 100)
  }
}

/**
 * IPV4Form验证
 */
export function iPV4Validator(rule, value, callback) {
  const reg = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
  if (value) {
    setTimeout(() => {
      if (reg.test(value)) {
        callback()
      } else {
        console.error('iPV4Validator', rule)
        callback(new Error('IPV4格式不正确'))
      }
    }, 100)
  }
}

/**
 * 用户账户Form验证
 */
export function usernameValidator(rule, value, callback) {
  const reg = /^[a-zA-Z0-9]+$/
  if (value) {
    setTimeout(() => {
      if (reg.test(value)) {
        callback()
      } else {
        console.error('usernameValidator', rule)
        callback(new Error('用户账户格式不正确(字母或数字，6-20字符)'))
      }
    }, 100)
  }
}

/**
 * 密码Form验证
 */
export function passwordValidator(rule, value, callback) {
  const reg = /(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,16}/
  if (value) {
    setTimeout(() => {
      if (reg.test(value)) {
        callback()
      } else {
        console.error('passwordValidator', rule)
        callback(new Error('密码格式不正确(必须包含字母、数字、特称字符，8-16字符)'))
      }
    }, 100)
  }
}

/**
 * 名称Form验证
 */
export function nameValidator(rule, value, callback) {
  const reg = /^[\u4E00-\u9FA5,A-Za-z]+$/
  if (value) {
    setTimeout(() => {
      if (reg.test(value)) {
        callback()
      } else {
        console.error('nameValidator', rule)
        callback(new Error('名称格式不正确(汉字或英文)'))
      }
    }, 100)
  }
}

/**
 * 编码Form验证
 */
export function codeValidator(rule, value, callback) {
  const reg = /^[a-zA-Z0-9]+$/
  if (value) {
    setTimeout(() => {
      if (reg.test(value)) {
        callback()
      } else {
        console.error('codeValidator', rule)
        callback(new Error('编码格式不正确(字母或数字，6-20字符)'))
      }
    }, 100)
  }
}

/**
 * 车牌号Form验证
 */
export function carNoValidator(rule, value, callback) {
  const reg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/
  if (value) {
    setTimeout(() => {
      if (reg.test(value)) {
        callback()
      } else {
        console.error('carNoValidator', rule)
        callback(new Error('车牌号格式不正确'))
      }
    }, 100)
  }
}

/**
 * 邮政编码Form验证
 */
export function postalCodeValidator(rule, value, callback) {
  const reg = /[1-9]d{5}(?!d)/
  if (value) {
    setTimeout(() => {
      if (reg.test(value)) {
        callback()
      } else {
        console.error('postalCodeValidator', rule)
        callback(new Error('邮政编码格式不正确'))
      }
    }, 100)
  }
}

/**
 * 0和1验证
 */
export function zeroOneValidator(rule, value, callback) {
  if (value) {
    setTimeout(() => {
      if (value === 0 || value === 1) {
        callback()
      } else {
        console.error('zeroOneValidator', rule)
        callback(new Error('数据错误'))
      }
    }, 100)
  }
}
